#include <stdlib.h>
#include <stdio.h>


int main()
{
    //申请堆上空间可能会失败，返回空指针
    // int *p = (int*)malloc(4);
    // if(p == NULL)
    // {
    //     printf("malloc 申请空间识别！\n");
    //     return -1;
    // }
    // *p = 20;
    // printf("%d\n",*p);
    // free(p);//释放堆上内存

    //一维数组的内存申请
    // int *p = malloc(sizeof(int)*10);
    // if(p == NULL)
    // {
    //     printf("malloc 申请空间失败！\n");
    //     return -1;
    // }
    // for(int i = 0;i < 10;i++)
    // {
    //     p[i] = i+1;
    //     printf("%d ",p[i]);
    // }
    // printf("\n");
    // free(p);

    //二维数组的申请
    int** p = (int**)malloc(sizeof(int*)*2);
    if(p == NULL)
    {
        printf("malloc 申请空间失败！\n");
        return -1;
    }
    for(int i = 0;i < 2;i++)
    {
        p[i] = (int*)malloc(sizeof(int)*3);
        if(p[i] == NULL)
        {
            printf("malloc 申请空间失败！\n");
            return -1;
        }
    }
    for(int i = 0;i < 2;i++)
    {
        for(int j = 0;j < 3;j++)
        {
            p[i][j] = i * 3 + j + 1;
        }
    }
    for(int i = 0;i < 2;i++)
    {
        for(int j = 0;j < 3;j++)
        {
            printf("%d ",p[i][j]);
        }
        printf("\n");
    }
    for(int i = 0;i < 2;i++)
        free(p[i]);
    free(p);
    return 0;
}